package com.gmail.nuclearcat1337.kits; import java.util.ArrayList; import java.util.List; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.BlockFace; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.util.Vector; import com.gmail.nuclearcat1337.anniPro.anniGame.AnniPlayer; import com.gmail.nuclearcat1337.anniPro.kits.KitUtils; import com.gmail.nuclearcat1337.anniPro.kits.Loadout; import com.gmail.nuclearcat1337.anniPro.main.AnnihilationMain; import com.gmail.nuclearcat1337.anniPro.voting.ConfigManager; import com.gmail.nuclearcat1337.base.ConfigurableKit; import com.gmail.nuclearcat1337.base.DelayUpdate; import com.gmail.nuclearcat1337.base.Delays; import com.gmail.nuclearcat1337.base.Direction; public class Scorpio extends ConfigurableKit { private ItemStack hookItem; private String hookItemName; @Override protected void setUp() { hookItem = KitUtils.addSoulbound(getIcon().clone()); ItemMeta m = hookItem.getItemMeta(); m.setDisplayName(hookItemName); hookItem.setItemMeta(m); Delays.getInstance().createNewDelay(getInternalName(), new DelayUpdate(){ @Override public void update(Player player, int secondsLeft) { //Do nothing }}); } private boolean isHookItem(ItemStack stack) { if(stack != null && stack.hasItemMeta() && stack.getItemMeta().hasDisplayName()) { String name = stack.getItemMeta().getDisplayName(); if(name.contains(this.hookItemName) && KitUtils.isSoulbound(stack)) return true; } return false; } @Override protected String getInternalName() { return "Scorpio"; } @Override protected ItemStack getIcon() { return new ItemStack(Material.NETHER_STAR); } @Override protected int setDefaults(ConfigurationSection section) { //section.set("HookItemName", "Hook"); return ConfigManager.setDefaultIfNotSet(section, "HookItemName", "Hook"); } @Override protected void loadKitStuff(ConfigurationSection section) { super.loadKitStuff(section); hookItemName = section.getString("HookItemName"); } @Override protected List<String> getDefaultDescription() { List<String> l = new ArrayList<String>(); addToList(l,new String[] { aqua+"You are the hook.", "", aqua+"Use your hook to quickly", aqua+"reach allies by pulling", aqua+"yourself to them, or use", aqua+"it on enemies to pull", aqua+"the enemy to you.", }); return l; } @Override public void cleanup(Player arg0) { } @EventHandler(priority = EventPriority.HIGHEST) public void specialItemActionCheck(final PlayerInteractEvent event) { if(event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) { Player player = event.getPlayer(); AnniPlayer pl = AnniPlayer.getPlayer(player.getUniqueId()); if(pl != null && pl.getKit().equals(this)) { if(this.isHookItem(player.getItemInHand())) { if(!Delays.getInstance().hasActiveDelay(player, this.getInternalName())) { Delays.getInstance().addDelay(player, System.currentTimeMillis()+5000, this.getInternalName());//kits.addDelay(player.getName(), DelayType.SCORPIO, 10, TimeUnit.SECONDS); Item item = player.getWorld().dropItem(player.getEyeLocation(), new ItemStack(Material.NETHER_STAR,1)); item.setPickupDelay(Integer.MAX_VALUE); item.setVelocity(player.getEyeLocation().getDirection().multiply(2)); Bukkit.getScheduler().scheduleSyncDelayedTask(AnnihilationMain.getInstance(), new HookTracer(item,pl,90,this.getName()), 1); } } } } } // @Override // public void onPlayerSpawn(Player player) // { // KitUtils.giveTeamArmor(player); // player.getInventory().addItem(KitUtils.getStoneSword()); // player.getInventory().addItem(KitUtils.getWoodPick()); // player.getInventory().addItem(KitUtils.getWoodAxe()); // player.getInventory().addItem(this.hookItem.clone()); // player.getInventory().addItem(KitUtils.getNavCompass()); // } @Override protected Loadout getFinalLoadout() { return new Loadout().addStoneSword().addWoodPick().addWoodAxe().addItem(this.hookItem); } private class HookTracer implements Runnable { private final String scorpioName; private final AnniPlayer owner; private final Item item; private final int maxTicks; public HookTracer(Item item, AnniPlayer owner, int maxTicks, String scorpioName) { this.item = item; this.owner = owner; this.maxTicks = maxTicks; this.scorpioName = scorpioName; } @Override public void run() { //maxTicks--; if(maxTicks <= 0 || !owner.getKit().getName().equals(scorpioName)) { item.remove(); return; } for(Entity entity : item.getNearbyEntities(1, 1, 1)) { if(entity.getType() == EntityType.PLAYER) { Player target = (Player)entity; AnniPlayer p = AnniPlayer.getPlayer(target.getUniqueId()); if(p != null && !p.equals(owner)) { Player user = owner.getPlayer(); if(user != null) { if(owner.getTeam() == p.getTeam()) { Location loc1 = user.getLocation(); Location loc2 = target.getLocation(); if(loc2.getY() >= loc1.getY()) { target.getWorld().playSound(target.getLocation(), Sound.DOOR_OPEN, 1F, 0.1F); user.getWorld().playSound(user.getLocation(), Sound.DOOR_OPEN, 1F, 0.1F); loc2.setY(loc1.getY()); Vector vec = loc2.toVector().subtract(loc1.toVector()).setY(.08D).multiply(7); user.setVelocity(vec); } } else { target.getWorld().playSound(target.getLocation(), Sound.DOOR_OPEN, 1F, 0.1F); user.getWorld().playSound(user.getLocation(), Sound.DOOR_OPEN, 1F, 0.1F); //plugin.getKits().stopNextFallDamage(target.getName()); Location loc = user.getLocation(); Location tele; Direction dec = Direction.getDirection(loc.getDirection()); if(dec == Direction.North) tele = loc.getBlock().getRelative(BlockFace.NORTH).getLocation(); else if(dec == Direction.South) tele = loc.getBlock().getRelative(BlockFace.SOUTH).getLocation(); else if(dec == Direction.East) tele = loc.getBlock().getRelative(BlockFace.EAST).getLocation(); else if(dec == Direction.West) tele = loc.getBlock().getRelative(BlockFace.WEST).getLocation(); else if(dec == Direction.NorthWest) tele = loc.getBlock().getRelative(BlockFace.NORTH_WEST).getLocation(); else if(dec == Direction.NorthEast) tele = loc.getBlock().getRelative(BlockFace.NORTH_EAST).getLocation(); else if(dec == Direction.SouthEast) tele = loc.getBlock().getRelative(BlockFace.SOUTH_EAST).getLocation(); else tele = loc.getBlock().getRelative(BlockFace.SOUTH_WEST).getLocation(); tele.setPitch(0); tele.setYaw(loc.getYaw()+180); target.teleport(tele); } } item.remove(); return; } } } Bukkit.getScheduler().scheduleSyncDelayedTask(AnnihilationMain.getInstance(), new HookTracer(item,owner,maxTicks-1,scorpioName), 1); } } }